<?php

/**
 * Description of VotarController
 *
 * @author ETorres
 * @export Modules
 */
class Votar extends Module {

    public function index() {
        if (!$this->model->Authentication->isAuthenticated()) {
            $this->route->redirect($this->route->appAction('Authentication', 'Login', 'index', array('urlReturn' => $this->route->action('index'))));
        } else {
            $this->assign('logout', $this->route->appAction('Authentication', 'Login', 'doLogout', array('urlReturn' => $this->route->action('index'))));
        }

        $codigo = $_SESSION['current_user'];

        if ($this->esHabilitado($codigo)) {
            $programas = $_SESSION['current_user_programas'];
            $facultades = array();

            foreach ($programas as $programa) {
                $temp = $this->model->career->GetById($programa);
                if (!in_array($temp->getFacultad(), $facultades)) {
                    array_push($facultades, $temp->getFacultad());
                }
            }

            $this->assign('realizarVoto', $this->route->action('realizarVoto'));
            $this->assign("facultades", $facultades);
            $this->display();
        } else {
            $this->Error();
        }
    }

    public function realizarVoto() {
        if (!$this->model->Authentication->isAuthenticated()) {
            $this->route->redirect($this->route->appAction('Authentication', 'Login', 'index', array('urlReturn' => $this->route->action('index'))));
        } else {
            $this->assign('logout', $this->route->appAction('Authentication', 'Login', 'doLogout', array('urlReturn' => $this->route->action('index'))));
        }

        $codigo = $_SESSION['current_user'];

        if ($this->esHabilitado($codigo)) {

            /* @var $actual Estudiantes */
            //$actual = $this->model->students->GetById($this->currentUser->getName());
            //$roles = $this->currentUser->getPermissions();

            $roles = $_SESSION['current_user_roles'];

            $facultad = $this->model->faculties->GetById($this->request->get('facultad'));

            if (in_array("ROLE_STUDENT", $roles)) {
                $representantesFacultad = $this->model->RepresentantesData->getEstudiantesAprobadosByCodigoFacultad($facultad->getCodigoFacultad());
            } else {
                if (in_array("ROLE_GRADUATE", $roles)) {
                    $representantesFacultad = $this->model->RepresentantesData->getEgresadosAprobadosByCodigoFacultad($facultad->getCodigoFacultad());
                } else {
                    if (in_array("ROLE_PROFESSOR", $roles)) {
                        $representantesFacultad = $this->model->RepresentantesData->getDocentesAprobadosByCodigoFacultad($facultad->getCodigoFacultad());
                    }
                }
            }

            if (count($representantesFacultad) == 0) {
                $this->addMessage(new Message("No hay candidatos para su facultad.", "", Message::ERROR));
            }

            $candidatosFacultad = array();

            foreach ($representantesFacultad as $representante) {
                if (in_array("ROLE_PROFESSOR", $roles)) {
                    /* @var $candidate Docentes */
                    $candidate = $this->model->teachers->GetById($representante["nit"]);

                    $temp = array(
                        'candidate' => $candidate,
                        'formatoFoto' => $representante["formatoFoto"],
                        'tipo' => 'docente'
                    );
                } else {
                    /* @var $candidate Estudiantes */
                    $candidate = $this->model->students->GetById($representante["codigo_estudiante"]);

                    $temp = array(
                        'candidate' => $candidate,
                        'formatoFoto' => $representante["formatoFoto"],
                        'tipo' => 'estudiante'
                    );
                }

                array_push($candidatosFacultad, $temp);
            }

            $this->assign("facultad", $facultad);
            $this->assign("candidatosFacultad", $candidatosFacultad);
            $this->assign("action", $this->route->action("save"));
            $this->display();
        } else {
            $this->Error();
        }
    }

    public function save() {

        $voto = $this->request->post("voto");
        $codigoVotante = $_SESSION['current_user'];

        if (isset($codigoVotante)) {
            if ($this->esHabilitado($codigoVotante) && isset($voto)) {
                $security = apache_request_headers();
                $security = implode("", $security);

                $this->model->RepresentantesData->guardarVotantes($codigoVotante);

                $roles = $_SESSION['current_user_roles'];
                if (in_array("ROLE_STUDENT", $roles)) {
                    $this->model->RepresentantesData->guardarVotoEstudiante($voto, $security);
                } else {
                    if (in_array("ROLE_GRADUATE", $roles)) {
                        $this->model->RepresentantesData->guardarVotoEgresado($voto, $security);
                    } else {
                        if (in_array("ROLE_PROFESSOR", $roles)) {
                            $this->model->RepresentantesData->guardarVotoDocente($voto, $security);
                        }
                    }
                }

                session_destroy();
                echo 'true';
                die;
            } else {
                echo 'false';
                die;
            }
        }
    }

    private function esHabilitado($codigo) {
        $roles = $_SESSION['current_user_roles'];
        if (in_array("ROLE_STUDENT", $roles)) {
            $actual = $this->model->students->GetById($codigo);
            if($actual->getEstadoEstudiante() != 0) {
                $_SESSION['error_message'] = 'Usted Actualmente no es un estudiante activo';
                return false;
            } else {
                $historial = $actual->getHistorialEstudiante();
                $last = count($historial) - 1;
                $lastHistorial = $historial[$last];
                if($lastHistorial->getEstadoAcademico() != 2){
                    $_SESSION['error_message'] = 'Su estado academico no esta activo';
                    return false;
                } else {
                    if($lastHistorial->getEstadoFinanciero() != 2) {
                        $_SESSION['error_message'] = 'Su estado financiero no esta activo';
                        return false;
                    }
                }
            }
        }
        $habilitado = $this->model->RepresentantesData->VerificarVotante($codigo);
        if ($habilitado != null) {
            $_SESSION['error_message'] = 'Usted ya ha votado';
            return false;
        }
        return TRUE;
    }

    public function Error() {
        
        $this->addMessage(new Message($_SESSION['error_message'], "", Message::ERROR));

        $this->display("Error");
    }

}

?>
